15-851 Project Report: Refinement Type Inference using Abstract Interpretation
نویسنده
چکیده
Typing checking is an efficient way to catch simple errors. Refinement types [3] are invented to take advantage of type systems in specifying more program properties and verifying them through type checking. In [3, 2], a method to use rectype declaration has been proposed to specify regular tree grammar based invariants. Datatype lattices are then derived from rectype declarations. An algorithm based on abstract interpretation [1] is used to infer refinement types. Abstract interpretation [1] is a program analysis techniques. Abstract domain is defined for a program, and the program’s execution on the concrete domain is approximated by operations on this abstract domain. Most often, results on the abstract domain are safe simulations of the actual execution. In this project, two refinement type inference algorithms based on abstract interpretation are described. one without intersection types and one with principal intersection types. In Section 2, a dialect of Mini-ML with type annotations to function arguments is defined, which is our source language. In Section 3, a simple refinement type inference algorithm is outlined, where there are no intersection types, thus expressions do not have principal types. In Section 4, a full-blown refinement type inference algorithm as is described in [2] is outlined. Experimental comparisons of these two algorithms are discussed in Section 5. Section 6 concludes the report with some future work.
منابع مشابه
HMC: Verifying Functional Programs Using Abstract Interpreters
Refinement Types are a promising approach for checking behavioral properties of programs written using advanced language features like higher-order functions, parametric polymorphism and recursive datatypes. The main limitation of refinement type systems to date is the requirement that the programmer provides the types of all functions, after which the type system can check the types and hence,...
متن کاملAutomatic Large-Scale Software Verification by Abstract Interpretation
interpretation is a theory of abstraction and constructive approximation of the mathematical structures used in the formal description of programming languages and the inference or verification of undecidable program properties. Developed in the late seventies with Radhia Cousot, it has since then been considerably applied to many aspects of programming, from syntax, to semantics, and proof met...
متن کاملAbstract Interpretation: Principles and Applications
interpretation is a theory of abstraction and constructive approximation of the mathematical structures used in the formal description of complex or infinite systems and the inference or verification of their combinatorial or undecidable properties. Developed in the late seventies with Radhia Cousot, it has been since then applied to many aspects of computer science (such as static analysis and...
متن کاملType-Based Data Structure Verification
We present a refinement type-based approach for the static verification of complex data structure invariants. Our approach is based on the observation that complex data structures are often fashioned from two elements: recursion (e.g., lists and trees), and maps (e.g., arrays and hash tables). We introduce two novel type-based mechanisms targeted towards these elements: recursive refinements an...
متن کاملFormal Verification by Abstract Interpretation
interpretation is a theory of abstraction and constructive approximation of the mathematical structures used in the formal description of programming languages and the inference or verification of undecidable program properties. Developed in the late seventies with Radhia Cousot, it has since then been considerably applied to many aspects of programming, from syntax, to semantics, and proof met...
متن کامل